package com.huanmeiqi.demo.quartz.schedule;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.scheduling.annotation.Scheduled;
import org.springframework.stereotype.Component;

import java.util.concurrent.TimeUnit;

/**
 * @author cq.Wang
 * @date 2018/6/15 11:54
 * @description
 */
@Component
public class ScheduleJobs {

    private Logger logger = LoggerFactory.getLogger(getClass());

    //    @Scheduled(fixedDelay = 2000) //无论Task执行了多久，都会在上个任务结束后延迟2秒在接着执行下一次
    public void fixedDelayJob() throws InterruptedException {
        // 模拟Task执行时长
        logger.info("---start fixedDelayJob---");
        TimeUnit.SECONDS.sleep(5L);
        logger.info("---end fixedDelayJob---");
    }

//    @Scheduled(fixedRate = 2000) // 每隔多少毫秒执行一次该方法，若Task执行超过了间隔时间，则下次任务紧接着执行，若没有超出间隔，则前后两次任务的间隔时间始终相差2秒
    public void fixedRateJob() throws InterruptedException {
        // 模拟Task执行时长
        logger.info("---start fixedRateJob---");
        TimeUnit.SECONDS.sleep(5L);
        logger.info("---end fixedRateJob---");
    }


    @Scheduled(cron = "*/2 * * * * ?") // 配置什么时候执行,每隔2秒,注意效果略不同于fixedRateJob
    public void cronJob() throws InterruptedException {
        // 模拟Task执行时长
        logger.info("---start cronJob---");
        TimeUnit.SECONDS.sleep(5L);
        logger.info("---end cronJob---");
    }

}
